home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_usrdoc / PROCMAIL.{23 / EXAMPLES / ADVANCED < prev    next >
Text File  |  1999-09-17  |  13KB  |  303 lines

  1.  
  2. Discusses:
  3.         1. One home directory, several machine architectures
  4.         2. Procmail as an integrated local mail delivery agent
  5.         2a.Special directions for sites with sendmail
  6.         2b.Special directions for sites with ZMailer
  7.         2c.Special directions for sites with smail
  8.         2d.Special directions for sites with SysV /etc/mail/mailsurr
  9.         3. Changing the mail spool directory to $HOME for all users
  10.         4. Security considerations (when installing procmail suid root)
  11.  
  12. NOTE: This file refers to the procmail binary being located in
  13. /usr/bin.  Some systems may place procmail in other locations such as
  14. /usr/local/bin.     Talk with your sysadmin if you are not sure.
  15.  
  16.                 ---
  17.  
  18. 1. One home directory, several machine architectures
  19.    -------------------------------------------------
  20.  
  21. For users that have the very same home directory on machines with differing
  22. architectures (i.e. you need different executables), and they
  23. have to explicitly use (i.e. the system administrator did not arrange,
  24. for example, /usr/bin/procmail to have exactly the right contents
  25. depending on from which machine it is called) two executables of procmail,
  26. I have the following suggestion to use as a .forward file (examples are for
  27. sparc and sun3 architectures):
  28.  
  29. "|IFS=' ';if /usr/bin/sparc;then exec /home/berg/bin.sun4/procmail;else exec /home/berg/bin.sun3/procmail;fi ||exit 75 #YOUR_USERNAME"
  30.  
  31. or alternatively:
  32.  
  33. "|IFS=' ' && export IFS && exec /home/berg/bin.`/usr/bin/arch`/procmail || exit 75 #YOUR_USERNAME"
  34.  
  35. Please note, in the .forward file there can NOT be any newlines between
  36. the doublequotes, i.e. the former example *has* to be typed in as one long
  37. line.
  38.  
  39. If, on the other hand, you have to log in to every machine to read mail
  40. arrived for you on that machine, a different solution might be more
  41. appropriate.
  42.  
  43. If you have sendmail v6.xx and later, you simply create two .forward files.
  44. In the .forward file you put:
  45.  
  46. YOUR_LOGIN_NAME@your.favourite.machine
  47.  
  48. And, in a second file named .forward.your.favourite.machine you put:
  49.  
  50. "|exec /usr/bin/procmail #YOUR_USERNAME"
  51.  
  52. If you have an older sendmail, you could put something like the following two
  53. lines in your .forward file:
  54.  
  55. YOUR_LOGIN_NAME@your.favourite.machine
  56. "|IFS=' ';test .`/bin/uname -n` != .your.favourite.machine || exec /usr/bin/procmail #YOUR_USERNAME"
  57.  
  58. The leading dots are important.     Check what `/bin/uname -n` returns on
  59. your.favourite.machine, and substitute that for your.favourite.machine in the
  60. sample .forward file.  If your system does not have /bin/uname, check if there
  61. is a /bin/hostname.
  62.  
  63. With some sendmails, the last suggestion causes you to get a superfluous
  64. copy in the system mailfolder.    If that is the case, you'll have to change
  65. your .forward to something like:
  66.  
  67. "|IFS=' ';if test .`/bin/uname -n` = .your.favourite.machine ; then exec /usr/bin/procmail; else exec /usr/lib/sendmail -oi YOUR_LOGIN_NAME@your.favourite.machine; fi"
  68.  
  69.                 ---
  70.  
  71. 2. Procmail as an integrated local mail delivery agent
  72.    ---------------------------------------------------
  73.  
  74. Completely integrating procmail in the mail delivery means that mail is
  75. delivered as normal, unless a .procmailrc file is present in the home
  76. directory of the recipient.  This will be completely independent of the
  77. fact if a .forward file is present.  This will not break anything, it
  78. just makes the use of procmail easier because people are not required to
  79. start up procmail from within their .forward files.  Creation of a .procmailrc
  80. file will suffice.
  81.  
  82. N.B. If you *are* installing it as the local delivery agent, and users on
  83.      your system have dormant .procmailrc files without corresponding
  84.      .forward file.  Then, after the installation, these dormant .procmailrc
  85.      files will be automagically activated/used (so you might want to rename
  86.      any dormant .procmailrc files out of the way and notify the users; do be
  87.      careful, since some users might invoke procmail through other means
  88.      (cron or login) and might be surprised if it stops working).
  89.  
  90. The generic way to accomplish this (works with sendmail, smail and any other
  91. mail system that uses a local mail delivery program that takes the mail-
  92. to-be-delivered on stdin and the recipient(s) on the command line, with or
  93. without the "-d" option) is this:
  94.  
  95. Move your current local mail delivery agent (e.g. /bin/mail, /bin/lmail,
  96. /usr/lib/mail/mail.local, etc.) out of the way, and create a (symbolic or hard)
  97. link from there to procmail, as in "ln /usr/bin/procmail /bin/lmail".
  98.  
  99. Beware, however, that if you are using this method, /bin/mail can *only* be
  100. used to deliver mail.  On many systems /bin/mail has several uses (also to
  101. read mail or check for mail).  So, it would definitely be preferred if you
  102. could edit the invocation of /bin/mail from within your mail transport agent
  103. to invoke procmail instead (with appropriate flags, if needed).     Special
  104. directions detailing this process for some of the more popular MTAs are
  105. included in subsections below.
  106.  
  107. In addition to needing root privileges upon startup, on some systems procmail
  108. needs to be sgid to daemon or mail.  One way to check is by looking at the
  109. current mail delivery agent (usually /bin/mail) and to mimic its permissions,
  110. owner and group.  If you're not quite sure, just type "make recommend" and some
  111. suitable recommendations will be made for your particular environment.
  112.  
  113. The same might apply to the "lockfile" program, in order for it to be able to
  114. create and unlink lockfiles in the mail spool directory it might need to be
  115. sgid to daemon or mail, not to worry however, "lockfile" will not enable users
  116. to abuse the sgid/suid-ness.
  117.  
  118.                 ---
  119.  
  120. 2a.Special directions for sites with sendmail
  121.    ------------------------------------------
  122.  
  123. The following lines should take the place of the standard Mlocal definition in
  124. your sendmail.cf (as for the fields "S=10, R=20": if your system uses others
  125. or none on the current Mlocal definition, use those *instead* of "S=10, R=20"):
  126.  
  127. If you're using a sendmail 8.6.x or older:
  128.  
  129. Mlocal, P=/usr/bin/procmail, F=lsSDFMhPfn, S=10, R=20,
  130.     A=procmail -Y -a $h -d $u
  131.  
  132. If you're using sendmail 8.7 or newer:
  133.  
  134.     In your *.mc file, insert FEATURE(local_procmail) or edit the
  135.     sendmail.cf file and change the Mlocal definition to match:
  136.  
  137. Mlocal, P=/usr/bin/procmail, F=SAw5:|/@glDFMPhsfn, S=10/30, R=20/40,
  138.     T=DNS/RFC822/X-Unix,
  139.     A=procmail -Y -a $h -d $u
  140.  
  141. In case you were wondering why there is no 'm' flag on this definition, you
  142. can add it if you want, but I recommend omitting it (it would enhance
  143. performance very slightly; however, if one of the multiple recipients causes
  144. mail to bounce, it will bounce for all recipients (since there is only
  145. one exitcode)).
  146.  
  147. To impose a 2MB limit on mails, you could add a `Maxsize=' field like in:
  148.  
  149. Mlocal, P=/usr/bin/procmail, F=lsSDFMhPfn, S=10, R=20, M=2000000,
  150.     A=procmail -Y -a $h -d $u
  151.  
  152. In order to take advantage of the optional meta argument that can be passed to
  153. procmail you'd have to change the sendmail.cf file to add a $#local mailer
  154. rule to set the $@ host name (which will be substituted for $h in the mailer
  155. definition).  There is nothing forcing you to do this, but if you do, you'll
  156. gain functionality.  If you are using sendmail 8.7.* or newer, and are
  157. using the standard FEATURE(local_procmail), then the support for this
  158. meta argument is already present.
  159.  
  160. For example:
  161.     Make sure that the definition of operators in the sendmail.cf file
  162.     includes the + sign (simply tack a + to the end of the "Do" definition,
  163.     unless it already contains one).
  164.     Now look for ruleset zero (S0), skip to the end of it.    There
  165.     usually is a rule there that takes care of local delivery, something
  166.     like:
  167.         R$+            $#local $:$1        local names
  168.     Don't change that rule, leave it there.     But, right BEFORE this
  169.     rule, create a new one similar to:
  170.         R$++$*            $#local $@$2 $:$1    local argument
  171.     Depending on the actual contents of your sendmail.cf file, there
  172.     still might be some other $#local rule(s) you need to precede with
  173.     a corresponding +-handling rule, e.g. in some files you also
  174.     find:
  175.         R$+ < $+ @ $+ >        $#local $: $1
  176.     Preceed that with:
  177.         R$+ + $* < $+ @ $+ >    $#local $@ $2 $: $1
  178.     (The spaces are not significant, the tabs are!)
  179.  
  180.     Now, if someone sends mail to fred+pizza@your.domain, procmail
  181.     will be called to deliver the mail as:
  182.         procmail -a pizza -d fred
  183.     In the .procmailrc file, you can now do an assignment like:
  184.         ARGUMENT=$1
  185.     which will expand to ARGUMENT=pizza.
  186.  
  187. N.B. that if you do *not* have sendmail v6.* or older, or IDA-sendmail, and
  188. would like to make use of the meta-argument, you'll have to drop the 'l'
  189. flag on the Mlocal definition and make sure that *every* $#local invocation
  190. carries a (possibly empty) $@ host definition.
  191.  
  192. Since you are editing the sendmail.cf file now anyway, you might as well setup
  193. an extra `procmail' mailer.  This Mprocmail can then be used as a general mail
  194. filter.     For more information, see the EXAMPLES section the procmail(1) man
  195. page.
  196.  
  197. N.B. Do NOT create the extra rules mentioned in the EXAMPLES section of the
  198.      procmail(1) man page, unless you already have an application demanding
  199.      those.  Only create the completely optional Mprocmail mailer.
  200.  
  201. After having edited the sendmail.cf file you'll have to kill (terminate)
  202. the running sendmail daemon.  Then restart it.    It will *not* suffice to
  203. send sendmail a SIGHUP (unless you are running sendmail 8.7.* or newer
  204. and started it with an absolute path).
  205.  
  206.                 ---
  207.  
  208. 2b.Special directions for sites with ZMailer
  209.    -----------------------------------------
  210.  
  211. The following line should be inserted into (or take the place of any previous
  212. local definition in) your sm.conf file for the Transport Agent:
  213.  
  214. local    sSPfn    /usr/bin/procmail        procmail -a $h -d $u
  215.  
  216.                 ---
  217.  
  218. 2c.Special directions for sites with smail
  219.    ---------------------------------------
  220.  
  221. For smail 2.x users there are two options:
  222.  i. Move the current local-mail-delivery program (probably /bin/lmail) out of
  223.     the way, make a symbolic or hard link from procmail to the name of that
  224.     program (e.g. "ln /usr/bin/procmail /bin/lmail")
  225.  ii.Make sure the following macro is defined in src/defs.h:
  226.     #define LMAIL(frm,sys) "/usr/bin/procmail -d"
  227.  
  228. For smail 3.x users there are also two options:
  229.  i. The same solution as for smail 2.x (however, method ii is preferred)
  230.  ii.Replace any existing "local"-entry in the /usr/lib/smail/transports file
  231.     (create one, if need be) with the following two lines:
  232.  
  233. local: return_path, local, from, driver=pipe; user=root,
  234.     cmd="/usr/bin/procmail -d $($user$)"
  235.  
  236.                 ---
  237.  
  238. 2d.Special directions for sites with SysV /etc/mail/mailsurr
  239.    ---------------------------------------------------------
  240.  
  241. Some systems use a SysV /bin/mail that supports mailsurr.  To interface
  242. procmail with mailsurr the following two lines should be inserted in the
  243. /etc/mail/mailsurr file (preferably at the bottom):
  244.  
  245. '(.+)' '([^@!]+)' '<S=0;C=67,75;F=*;
  246.     /usr/bin/procmail -f \\1 -d \\2'
  247.  
  248.                 ---
  249.  
  250. 3. Changing the mail spool directory to $HOME for all users
  251.    --------------------------------------------------------
  252.  
  253. There are many different reasons why more and more sites decide not to
  254. store mail in /usr/spool/mail or /usr/mail anymore.
  255. Some of the obvious advantages when storing mail in the recipient's home
  256. directory are:
  257.     - Mail is automatically subject to the user's quota limitations.
  258.     - Often there is more room on the home partition(s) than on that
  259.       one /usr/mail partition.
  260.  
  261. The quota limitations also apply to /usr/spool/mail or /usr/mail if procmail
  262. does the delivery.  These quota limitations often do not work with the
  263. regular /bin/mail since that usually writes the mailbox with root permissions
  264. (eluding the quota restrictions).
  265.  
  266. However, if you are going to install procmail as the integrated local
  267. delivery agent, and you want mail to be delivered to, say, $HOME/.mail
  268. by default, this is what you have to do:
  269.  
  270.     Edit the procmail*/config.h file.   Uncomment and possibly change
  271.     the SYSTEM_MBOX define.     Procmail now delivers there by default.
  272.  
  273.     In order to make sure that normal mailtools can find the new
  274.     system mailboxes, you should make sure that every user has the
  275.     MAIL environment variable set to be equal to whatever you
  276.     defined SYSTEM_MBOX to be.  Some braindamaged mail programs
  277.     do not pick up the MAIL environment variable, these either
  278.     have to be patched/recompiled or you have to create symbolic
  279.     links in /usr/mail to every person's new mailbox.
  280.  
  281.                 ---
  282.  
  283. 4. Security considerations (when installing procmail suid root)
  284.    -------------------------------------------------------------
  285.  
  286. If in EXPLICIT DELIVERY mode (typically when called from within sendmail)
  287. procmail will ALWAYS change UID and gid to the RECIPIENT's defaults as soon as
  288. it starts reading the recipient's $HOME/.procmailrc file.
  289.  
  290. If NOT in explicit delivery mode (typically when called from within the
  291. recipient's $HOME/.forward file) procmail will ALWAYS change UID and gid to
  292. the real uid and gid of the INVOKER (effectively losing any suid or sgid
  293. privileges).
  294.  
  295. These two precautions should effectively eliminate any security holes because
  296. procmail will always have the uid of the person whose commands it is executing.
  297.  
  298. To summarise, procmail will only behave better if made suid/sgid something, in
  299. fact, making procmail suid/sgid something will *improve* security on systems
  300. which have dynamically linked libraries.
  301.  
  302.                 ---
  303.